package cn.itcast.hotel.utils;

import cn.itcast.hotel.pojo.HotelDoc;
import com.alibaba.fastjson.JSON;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import java.io.IOException;
import java.util.Map;

//@Component
public class HandleResposeUtils {
    //构造方法私有化 不允许new
    private HandleResposeUtils() {
    }

    public static void handleRespose(SearchResponse searchResponse) throws IOException {

//        4.解析结果(解析json格式的数据)
        SearchHits searchHits = searchResponse.getHits();
//        4.1获取总条数 方便进行遍历
        long total = searchHits.getTotalHits().value;
        System.out.println("共搜索到" + total + "条数据");
//        4.2查询的结果数组
        SearchHit[] hits = searchHits.getHits();
//        4.3遍历所有的hits元素
//        4.3遍历所有的hits元素
        for (SearchHit hit : hits) {
//            4.4获得source
            String sourceAsString = hit.getSourceAsString();
//            4.6反序列化 适合返回给前端DOC数据
            HotelDoc hotelDoc = JSON.parseObject(sourceAsString, HotelDoc.class);
//            System.out.println("hotelDoc = " + hotelDoc);
            //            4.5获取高亮部分
            Map<String, HighlightField> highlightFields = hit.getHighlightFields();
//            通用的结果 判断是否包含高亮字段
            if (!CollectionUtils.isEmpty(highlightFields)) {
//                简化了 默认只有一个高亮的部分 其实有多个需要拼接
                HighlightField name = highlightFields.get("name");
//                获取数组中的第一个
                String stringName = name.getFragments()[0].toString();
//                替换掉原型文档doc的高亮
                hotelDoc.setName(stringName);
            }
//            打印文旦查看高亮信息
            System.out.println("doc = " + hotelDoc);
        }
    }
}
